//package com.bluebuck.report.common.core.repository;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.bluebuck.report.common.core.repository.condition.BaseCondition;
//import com.bluebuck.report.common.core.repository.condition.GenericMapper;
//import com.bluebuck.report.common.core.repository.condition.PageIterator;
//import com.google.common.base.Preconditions;
//import com.google.common.collect.Lists;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.util.CollectionUtils;
//
//import java.util.ArrayList;
//import java.util.List;
//
//
///**
// * @author geney
// */
//@Slf4j
//public abstract class BaseRepositoryImpl<T> implements IBaseRepository<T> {
//
//
//    private GenericMapper mapper;
//
//    public BaseRepositoryImpl(GenericMapper mapper) {
//        this.mapper = mapper;
//    }
//
//    @Override
//    public PageIterator<T> flip(BaseCondition condition, int pageNo, int pageSize, boolean count) {
//        if (pageSize >= 20000) {
//            log.info("[flip] 分页查询,单页数据允许超过20000条,请核实操作, condition:{}, pageSize:{}", pageSize, JSONObject.toJSONString(condition));
//            throw new RuntimeException("分页查询,单页数据允许超过20000条,请核实操作");
//        }
//        long total = -1;
//        if (count) {
//            total = mapper.countByCondition(condition);
//        }
//        PageIterator<T> pageIterator = PageIterator.create(pageNo, pageSize, total, new ArrayList<>());
//        if (total == 0) {
//            return pageIterator;
//        }
//
//        condition.setLimitOffset(pageIterator.getOffset());
//        condition.setLimitSize(pageSize);
//        pageIterator.setData(mapper.selectByCondition(condition));
//
//        return pageIterator;
//    }
//
//    @Override
//    public T getById(Long id) {
//        return (T) mapper.selectById(id);
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public Boolean save(T model) {
//        Preconditions.checkNotNull(model);
//        return mapper.insertSelective(model) > 0;
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public void save(List<T> list) {
//        if (CollectionUtils.isEmpty(list)) {
//            return;
//        }
//        Lists.partition(list, 200).forEach(part -> mapper.insertBatchSelective(part));
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public Boolean updateById(T model) {
//        Preconditions.checkNotNull(model);
//        return mapper.updateByIdSelective(model) > 0;
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    @Override
//    public void updateById(List<T> list) {
//        if (CollectionUtils.isEmpty(list)) {
//            return;
//        }
//        list.stream().forEach(t -> updateById(t));
//    }
//
//
//}
